package main

import "fmt"

// 1、定义函数类型
type calc func(int, int) int
type myInt int //自定义类型

func add(x, y int) int {
	return x + y
}
func sub(x, y int) int {
	return x - y
}

func test() {
	fmt.Println("test...")
}

type cbType func(int, int) int

// 2、方法作为另一个函数的参数 改函数接受了两个int类型参数，第三个参数是一个 cbType类型的函数 有点像callback函数
func receiveCb(x, y int, cb cbType) int {
	return cb(x, y)
}

func main() {
	// fmt.Println(factorial(8))
	var c calc
	c = add
	fmt.Printf("c的类型：%T\n", c) // main.calc

	d := add
	fmt.Printf("d的类型：%T\n", d) //func(int, int) int  类型推倒

	var a1 int = 100
	var a2 myInt = 200
	fmt.Printf("a的类型：%T,b的类型：%T\n", a1, a2) //a的类型：int,b的类型：main.myInt
	fmt.Println(myInt(a1) + a2)             // 虽然都是Int数字类型 但是一个是myInt 仍然需要转换成同一类型

	fmt.Println(receiveCb(100, 200, sub))
}
